################################################################################
#
#   The player.
#
#   controller  : the game's controller instance.
#   x, y        : the player's starting position.
#   rank        : the game's difficulty (range from 0 to 1.0).
#
################################################################################







################################################################################
#   The PLAYER class :
################################################################################
class Player

  attr_accessor :x, :y,
                :rank



  ##############################################################################
  #   CREATING a new instance of the Player class :
  ##############################################################################
  def initialize(controller, x, y, rank)

    @controller   = controller

    @x            = x
    @y            = y
    @vx           = 0
    @vy           = 0
    @s            = 3         # The moving speed.

    @rank         = rank

    @image        = nil
    @rect         = nil

    @half_width   = 0
    @half_height  = 0

  end





  ##############################################################################
  #   SETTING the PLAYER's ship representation :
  ##############################################################################
  def setImage(image, rect)

    @image        = image
    @rect         = rect

    @half_width   = @rect[2]/2.0
    @half_height  = @rect[3]/2.0

  end





  ##############################################################################
  #   RESPONDING to events :
  ##############################################################################
  def eventResponse(e)


    # What is this event made of? What do we do about it ?                      #
    # Again, all the code assignments are for a PS3 Fighting Stick 3.           #
    #############################################################################
    case e

    when JoyHatEvent #------------------------------------- JoyHatEvent : ------
      case e.value
      when 0                  # Centered
        @vx = 0
        @vy = 0
      when 1                  # Up
        @vx = 0
        @vy = -@s
      when 2                  # Right
        @vx = @s
        @vy = 0
      when 3                  # Up right
        @vx = @s
        @vy = -@s
      when 4                  # Down
        @vx = 0
        @vy = @s
      when 6                  # Down right
        @vx = @s
        @vy = @s
      when 8                  # Left
        @vx = -@s
        @vy = 0
      when 9                  # Up left
        @vx = -@s
        @vy = -@s
      when 12                 # Down left
        @vx = -@s
        @vy = @s
      end

    when JoyDownEvent #------------------------------------ JoyDownEvent : -----
      case e.button
      when 0
        @s=1                  # Button 1, 2, 3 or 4 pushed -> slow down.
      when 1
        @s=1
      when 2
        @s=1
      when 3
        @s=1
      end

    when JoyUpEvent #-------------------------------------- JoyUpEvent : -------
      case e.button
      when 0
        @s=3                  # Button released -> back to full speed.
      when 1
        @s=3
      when 2
        @s=3
      when 3
        @s=3
      end

    when KeyDownEvent #------------------------------------ KeyDownEvent : -----
      case e.key
      when K_UP
        @vy-=@s
      when K_DOWN
        @vy+=@s
      when K_LEFT
        @vx-=@s
      when K_RIGHT
        @vx+=@s
      when K_SPACE
        @s=1
      end

    when KeyUpEvent #-------------------------------------- KeypEvent : -------
      case e.key
      when K_UP
        @vy = 0
      when K_DOWN
        @vy = 0
      when K_LEFT
        @vx = 0
      when K_RIGHT
        @vx = 0
      when K_SPACE
        @s=3
      end

    end
  end





  ##############################################################################
  #   RUNNING the player's object :
  ##############################################################################
  def run

    # If the player's sprite reaches the boundaries of the screen, stop it :
    unless (@half_width..@controller.screen.width-@half_width).include? @x+@vx then
      @vx = 0
    end

    unless (@half_height..@controller.screen.height-@half_height).include? @y+@vy then
      @vy = 0
    end

    # Updating the player's coordinates :
    @x+=@vx
    @y+=@vy

    if @status == :hit then @status = :dying end

  end





  ##############################################################################
  #   DRAWING the player's object :
  ##############################################################################
  def draw

    # Drawing the player's representation :
    @image.blit(@controller.screen, [@x-@half_width,@y-@half_height], @rect)

  end

end ### End of the PLAYER class ################################################
